#pragma once
#include <string>
#include "Request.hpp"
#include "Response.hpp"
#include "PackManage.hpp"
#include "Calculator.hpp"

namespace FormatModule
{
    using namespace RequestModule;
    using namespace ResponseModule;
    using namespace PackManageModule;

    struct Format
    {
        std::string HandlerRequest(std::string &inbuffer)
        {
            std::string request_str;
            std::string result_str;
            while (PackManage::Decode(inbuffer, &request_str))
            {
                std::string resp_str;
                // 一定拿到了一个完整报文
                // 1. 反序列化
                if (request_str.empty())
                    break;
                Request req;
                if (!req.Deserialize(request_str))
                    break;
                // 2. 业务处理
                Response resp = cal.Execute(req); 
                // 3. 序列化
                resp.Serialize(resp_str);
                // 4. 添加长度说明 -- 协议
                PackManage::Encode(resp_str,&resp_str);
                // 5. 添加所有的应答
                result_str += resp_str;
            }
            return result_str;
        }
    };
}